PACKAGE BODY Valeur IS

   PROCEDURE Put(F: Ada.Text_IO.File_Type; X : IN Valeur) IS
   BEGIN
      Ada.Text_IO.Put(F,Natural'Image(X / 100));
      Ada.Text_IO.put(F,",");
      Ada.Text_IO.put_line(F,Natural'Image(X mod 100));
   END Put;

   PROCEDURE PutFichier(F: Ada.Text_IO.File_Type; X : IN Valeur) IS
   BEGIN
      Ada.Text_IO.put_line(F,Natural'Image(X ));
   END PutFichier;


   PROCEDURE Get(X : OUT Valeur;S : String:="Entrez une note de la forme xx,yy") IS
      VIRGULE : Character:=',';

   BEGIN
      loop
         Ada.Text_IO.Put_Line(S);
         DECLARE
            UN,DEUX,TROIS,QUATRE : natural := 48;
            SAISIE : string := Ada.Text_IO.Get_Line;
         BEGIN
            CASE SAISIE'Length IS
               WHEN 1=>
                  DEUX := Character'Pos(SAISIE(1));
               WHEN 2 =>
                  UN:= Character'Pos(SAISIE(1));
                  DEUX:= Character'Pos(SAISIE(2));

               WHEN 3 => IF SAISIE(2) /= VIRGULE THEN RAISE Constraint_Error; else
                     DEUX:= Character'Pos(SAISIE(1));
                     TROIS:= Character'Pos(SAISIE(3));
                  END IF;
               when 4 =>IF SAISIE(3) /= VIRGULE THEN RAISE Constraint_Error; else
                     UN:= Character'Pos(SAISIE(1));
                     DEUX:= Character'Pos(SAISIE(2));
                     TROIS := Character'Pos(SAISIE(4));
                  END IF;
               when 5=> IF SAISIE(3) /= VIRGULE THEN RAISE Constraint_Error; else
                     UN:= Character'Pos(SAISIE(1));
                     DEUX:= Character'Pos(SAISIE(2));
                     TROIS := Character'Pos(SAISIE(4));
                     QUATRE := Character'Pos(SAISIE(5));
                  END IF;

               when others => RAISE Constraint_Error;
            END CASE;
            X := 1000*(UN-48)+100*(DEUX-48)+10*(TROIS-48)+(QUATRE-48);
            EXIT;
         Exception
            WHEN Constraint_ERROR => Ada.Text_IO.Put_Line("Valeur de note saisie incorecte");
         END;
      END loop;

   END Get;

   PROCEDURE GetFichier(F:Ada.Text_IO.File_Type;X:OUT Valeur) IS
   BEGIN
      X := Natural'Value(Ada.Text_IO.Get_Line(F));
   END GetFichier;



END Valeur;
